Skip to main content

第 2 课:版本管理

(一) Git 的三个区域

git 内分3个区域:工作区,暂存区,和本地仓库

工作区就是平时看到的文件目录,暂存区是上交时的缓存区域,本地仓库存储着所有的修改版本,需要用命令查看

工作区内的文件,必须先提交到缓存区,然后才能上传到仓库,可以多次提交到缓存区,然后一次性上传到仓库

image-20251231173328590

git文件有4种状态

image-20251231173636380

查看当前仓库的状态

git status

image-20260127134643719可以看到 test.py 还没有被放入缓存区

git add test.py

image-20260127134743901

或者把当前文件夹下的所有文件都添加到暂存区

git add .

取消该文件的暂存

git rm --cached test.py

把缓存区的文件提交到本地仓库

git commit -m “first1”

-m参数后是 提交的注释内容

image-20260127134831283

该命令可以同时完成暂存和提交,不需要再git add .

git commit -a -m "xxxxxx"

查看所有提交记录

git log

简洁版查看提交记录,(版本号+提交注释)

git log --oneline

查看暂存区文件

git ls-files

清楚暂存区的所有内容

git reset 

回退版本(按提交次数)

git reset --soft 版本ID
git reset --hard 版本ID (谨慎使用)
git reset --mixed 版本ID
git reset --mixed HEAD^

HEAD^ 表示回退到上一个版本

途中×表示被删除,√表示保留

image-20260127135054376

删除工作区和暂存区的该文件

git rm 文件名

注意还要git commit一下,不然版本库的内容没有被删掉!

只删除暂存区,不删除工作区文件

git rm --cached 文件名

(二).gitignore

.gitignore 文件用于存储不应该被纳入版本库的文件

image-20260127135352449

echo 文件名 > .gitignore 

(不需要加引号)

这样再 commit 时,该文件就不会被提交到版本库中

注意:该文件不能事先已经提交到版本库中,否则 .gitignore 失效

忽略所有日志文件

echo *.log > .gitingore 

也可以直接修改.gitignore 文件。

如图就是要忽略的内容。其中temp文件夹下的所有文件都被忽略。

image-20260127135513614

image-20260127135537153

示例:

image-20260127135549549

注意:在github上有各种语言的默认 .gitignore 模板

(三)同步远程仓库

我们需要同步本地仓库和远程仓库

我们在第二步中已经克隆好了远程仓库

image-20260127135638567

注意要进入Heihe-CS-learning那个文件夹!在外面是连接不到的!

我们先把test.py传到本地仓库

image-20260127135652617

把所有本地仓库的内容推送给远程仓库

git push

image-20260127135709079此时就可以查看了

image-20260127135716629

从远程仓库下载文件

git pull 

默认是 git pull 仓库名 main分支



(四)分支

image-20260127135759114

查看当前仓库的所有分支

git branch 

image-20260127135816551

前面带有*号的就是当前分支

创建新的分支,切换到新分支

git branch  新分支名
git switch 新分支名

如果新分支的修改还没提交:

  • 在新分支中时,ls 查看包括新添加的文件和主分支的文件

  • 在主分支main中时,ls 不能查看新分支中的修改和新文件

image-20260127135917927

要把分支合并,首先要切换到main分支

把新分支合并到当前分支(main分支)

git merge 新分支名

git会自动进行一次提交,所以提示信息里 会要求输入注释信息

合并之后上图的分支就会变成这样

image-20260127140010133

查看分支图

git log --graph --oneline

合并分支后新分支并不会被删除,要删除需要使用下面这个命令

git branch -d 新分支名	

但是这个删除命令只能在该分支被合并后执行,如果要在合并之前删除,需要

git branch -D 新分支名

(五)分支合并冲突解决

当两个分支同时修改了同一个文件的同一行时,合并会出现错误

比如两个分支同时修改了 main1.txt,在新分支中修改如下,并提交

image-20260127140127550

在main分支中修改如下,并提交

image-20260127140138879

在 “git merge 新分支名” 合并时,报错如下

image-20260127140148959

查看冲突文件的列表

git status

image-20260127140204718

可以看到是 main1.txt


查看冲突具体内容

git diff 

image-20260127140232129

等号上面是当前分支(main分支)中的修改内容,等号下面是新分支中修改的内容

所以我们要手工编辑这个文件

当再次打开 main1.txt 时,内容已经变成如下:

image-20260127140332106

改成如下

image-20260127140344996

保存退出,添加暂存并提交

由于之前的合并过程尚未完成,这里commit 提交完成后会自动完成合并

若要终止合并,需要预先使用命令:

git merge --abort

(六)另一种合并——变基

之前我们使用的merge进行合并分支,过程如下

merge过程必须要在main分支上进行

然而使用 rebase 命令可以在任意分支上进行合并

比如本来是这样的分支结构

image-20260127140503284

如果在dev分支上进行合并,会变成

image-20260127140512686

如果在main分支上进行合并,会变成

image-20260127140526758

这是因为rebase会找到当前分支和另一个分支最近的祖先节点,然后把这一段移动到另一个分支的head指针上(可以用链表来理解)

image-20260127140545239

把当前分支变基到另外一个分支

git rebase 另一个分支名